package lu.med.praxiswahl.wahlumed.service.beans;

import java.util.Calendar;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;

import lu.med.praxiswahl.wahlumed.dao.beans.daointerface.OPBillsDAOInt;
import lu.med.praxiswahl.wahlumed.model.beans.OPBillsTBL;
import lu.med.praxiswahl.wahlumed.service.beans.serviceinterface.CustomerServiceInt;
import lu.med.praxiswahl.wahlumed.service.beans.serviceinterface.OPBillServiceInt;

/**
 * Session Bean implementation class OPBillService
 */
@Stateless
@Remote({ OPBillServiceInt.class })
public class OPBillService implements OPBillServiceInt {

	@EJB
	private OPBillsDAOInt opBillDao;

	@EJB
	private CustomerServiceInt cust;

	// private OPBillContentService contentService;

	/**
	 * Default constructor.
	 */
	public OPBillService() {

		// contentService = new OPBillContentService();
	}

	@Override
	public int create_ACTUAL_Bill(Long rechnungsNummer, String matricule,
			boolean erstellt, boolean bezahlt, Calendar erstelltDatum)
			throws RuntimeException {
		OPBillsTBL newItem = new OPBillsTBL();

		newItem.setRechnung_nummer(rechnungsNummer);
		newItem.setCustomer(cust.getCustomer(matricule));
		newItem.setErstell_datum(erstelltDatum);
		newItem.setBezahlt(bezahlt);
		newItem.setErstellt(erstellt);

		opBillDao.persist(newItem);

		return DONE;
	}

	@Override
	public int create_PAYED_Bill(Long rechnungsNummer, String matricule,
			boolean erstellt, boolean bezahlt, Calendar erstelltDatum)
			throws RuntimeException {
		OPBillsTBL newItem = new OPBillsTBL();

		newItem.setRechnung_nummer(rechnungsNummer);
		newItem.setCustomer(cust.getCustomer(matricule));
		newItem.setErstell_datum(erstelltDatum);
		newItem.setBezahlt(bezahlt);
		newItem.setErstellt(erstellt);

		opBillDao.persist(newItem);

		return DONE;
	}

	@Override
	public int removeOPBillItem(Long opBillNumber) throws RuntimeException {
		opBillDao.delete(opBillNumber);
		if (opBillDao.findBillsByID(opBillNumber) == null) {
			return DONE;
		}
		return UNDONE;

	}

	@Override
	public List<OPBillsTBL> retrieveAvailableActualBillsByCustomer(
			String matricule) {
		List<OPBillsTBL> resultList = opBillDao
				.findAvailableActualBillsByCustomer(matricule);
		return resultList;
	}

	@Override
	public List<OPBillsTBL> retrieveAvailableCreatedBillsByCustomer(
			String matricule) {
		List<OPBillsTBL> resultList = opBillDao
				.findAvailableCreatedBillsByCustomer(matricule);
		return resultList;
	}

	@Override
	public List<OPBillsTBL> retrieveAvailableBillsInPC() {
		List<OPBillsTBL> resultList = opBillDao.findAvailableBillsInPC();
		return resultList;
	}

	@Override
	public List<OPBillsTBL> retrieveAvailablePayedBillsByCustomer(
			String matricule) {
		List<OPBillsTBL> resultList = opBillDao
				.findAvailablePayedBillsByCustomer(matricule);
		return resultList;
	}

	@Override
	public Long retrieveLastCreateOPBillNumber() {
		Long lastBillNumber = opBillDao.getLastCreatedOPBillNumber();
		return lastBillNumber;
	}

	@Override
	public OPBillsTBL retrieveOPBillByID(long id) {

		return opBillDao.findBillsByID(id);
	}

	@Override
	public void updateOPBillItem(OPBillsTBL billItem) {
		this.opBillDao.update(billItem);
		/*
		 * OPBillsTBL opBillItem =
		 * this.retrieveOPBillByID(billItem.getRechnung_nummer());
		 * 
		 * opBillItem.setAnzahlung(billItem.getAnzahlung());
		 * opBillItem.setAPayer(billItem.getAPayer());
		 * opBillItem.setBesonderheit(billItem.getBesonderheit());
		 * opBillItem.setBezahlt(billItem.isBezahlt());
		 * opBillItem.setBill_class(billItem.getBill_class());
		 * opBillItem.setCash(billItem.isCash());
		 * opBillItem.setKarte(billItem.isKarte());
		 * opBillItem.setErstell_datum(billItem.getErstell_datum());
		 * opBillItem.setImDossier(billItem.isImDossier());
		 * opBillItem.setKarten_typ(billItem.getKarten_typ());
		 * opBillItem.setNoten(billItem.getNoten());
		 * if(billItem.getRueckueberweisung_datum() != "") {
		 * opBillItem.setRueckueberweisung_datum
		 * (billItem.getRueckueberweisung_datum());
		 * opBillItem.setRueck_ueberweisung(true); }
		 * opBillItem.setUeberweisung(billItem.isUeberweisung());
		 * opBillItem.setZugeschickt(billItem.isZugeschickt());
		 */

	}

}
